#include<iostream>
#include"contacts.pb.h"

//ProtoBuf 全称Protocol Buffer 数据结构序列化和反序列化框架
//我们只需要编写proto文件，描述需要定义什么样的结构化对象，有什么样的成员，每一个成员有什么样的属性
//结构方便需要注意：声明语法版本: syntax ="proto3" , 声明命名空间名称： package name;
//编译proto 文件会形成两个文件， .h 中定义了我们所描述的数据结构对象类， .cc 当中实现了结构化对象数据的访问、操作、序列化、反序列化
//需要注意的是， proto文件的命名只能使用小写字母以及_ 
//在message当中可以定义其属性字段，字段类型 字段名 = 字段唯一编号；  

int main()
{
    contacts::contact conn;
    conn.set_sn(1111);
    conn.set_name("张三");
    conn.set_score(99.9);

    //持久化数据就存放在string对象中，调用接口SerializeAsString 将conn 中的数据序列化成string 然后保存下来
    std::string str = conn.SerializeAsString();//序列化一般不会失败，所以此处没有判断序列化是否成功

    //反序列化
    contacts::contact stu;
    //反序列化可能会失败，需要判断其返回值
    bool ret = stu.ParseFromString(str);
    if(ret == false)
    {
        std::cout << "反序列化失败" << std::endl;
        return -1;
    }
    //将反序列化的结果打印出来
    std::cout << stu.sn() << std::endl;
    std::cout << stu.name() << std::endl;
    std::cout << stu.score() << std::endl;
    return 0;
}